8.2 列数据转行方向(列为分层索引转换)
提供了一个列是分层索引的表格,
import pandas as pd
df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\1.8.02 列数据转行方向(列为分层索引转换).xlsx" , header =[ 0,1 ], index_col = 0 )
#导入时需指定索引,不然转换后会出现分组
print (df)
df1=df.stack(level=( "年份","半年" )).to_frame().reset_index().rename(columns={0: "数量" })
print (df1)
df2=df1.groupby( "年份" ).agg(
总数量=( "数量","sum" ),
平均=( "数量","mean" )
).reset_index()
print (df2)
返回:
| 年份 | 2018年 | 2019年 | ||
|---|---|---|---|---|
| 半年 | 上半年 | 下半年 | 上半年 | 下半年 |
| 姓名 | ||||
| 张三 | 1101 | 1200 | 915 | 1174 |
| 李四 | 886 | 1146 | 649 | 905 |
| 许流子 | 870 | 583 | 776 | 628 |
| 郭鬼子 | 620 | 947 | 1000 | 529 |
| 姓名 | 年份 | 半年 | 数量 | |
|---|---|---|---|---|
| 0 | 张三 | 2018年 | 上半年 | 1101 |
| 1 | 张三 | 2018年 | 下半年 | 1200 |
| 2 | 张三 | 2019年 | 上半年 | 915 |
| 3 | 张三 | 2019年 | 下半年 | 1174 |
| 4 | 李四 | 2018年 | 上半年 | 886 |
| 5 | 李四 | 2018年 | 下半年 | 1146 |
| 6 | 李四 | 2019年 | 上半年 | 649 |
| 7 | 李四 | 2019年 | 下半年 | 905 |
| 8 | 许流子 | 2018年 | 上半年 | 870 |
| 9 | 许流子 | 2018年 | 下半年 | 583 |
| 10 | 许流子 | 2019年 | 上半年 | 776 |
| 11 | 许流子 | 2019年 | 下半年 | 628 |
| 12 | 郭鬼子 | 2018年 | 上半年 | 620 |
| 13 | 郭鬼子 | 2018年 | 下半年 | 947 |
| 14 | 郭鬼子 | 2019年 | 上半年 | 1000 |
| 15 | 郭鬼子 | 2019年 | 下半年 | 529 |
| 年份 | 总数量 | 平均 | |
|---|---|---|---|
| 0 | 2018年 | 7353 | 919.125 |
| 1 | 2019年 | 6576 | 822.000 |